Ви не увійшли.
Сторінки 1
Основная проблема в команде scrollMessage(scrollText2); Она как delay() . Пока она работает остальное стоит. А когда она закончится начнет работать все остальное по очереди. До следущих тормозов похожих на delay() . Это не Ардуино виновата. Это даунский подход к программироваю на Си на этой платформе. Вижу несколько путей: есть визуал программирование на Ардуине. Хотя так кривой код, но тормозов delay() поменьше. Или же учить глубже Си->Cи++ -> ООП . Я выбрал 2 путь. Ничего по этому огрызку программы не скажу, так как это огрызок. А у меня хрустальный шар затерялся.
Спасибо, что пытаетесь помочь.
#include <IRremote.h>
#include <IRremoteInt.h>
#include <LedControl.h>
#include <avr/pgmspace.h>
#include <LedControl.h>
IRrecv irrecv(2);
decode_results results;
const int numDevices = 4; // number of MAX7219s used
const long scrollDelay = 75; // adjust scrolling speed
unsigned long bufferLong [14] = {0};
LedControl lc=LedControl(12,11,10,numDevices);
const unsigned char scrollText[] PROGMEM ={" 12345 "};
const unsigned char scrollText2[] PROGMEM ={" 0123456 "};
void setup(){
for (int x=0; x<numDevices; x++){
lc.shutdown(x,false); //The MAX72XX is in power-saving mode on startup
lc.setIntensity(x,8); // Set the brightness to default value
lc.clearDisplay(x); // and clear the display
Serial.begin(9600);
irrecv.enableIRIn();
}
}
void loop(){
if ( irrecv.decode( &results )) {
Serial.println(results.value, HEX);
if (results.value==0xFF30CF){
scrollMessage(scrollText);results.value=0;
}
if (results.value==0xFF18E7){
scrollMessage(scrollText2);results.value=0;
}
irrecv.resume();
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const unsigned char font5x7 [] PROGMEM = { //Numeric Font Matrix (Arranged as 7x font data + 1x kerning data)
B00000000, //Space (Char 0x20)
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
6,
B10000000, //!
B10000000,
B10000000,
B10000000,
B00000000,
B00000000,
B10000000,
2,
//Тут перечень букв идет//
void scrollFont() {
for (int counter=0x20;counter<0x80;counter++){
loadBufferLong(counter);
delay(500);
}
}
// Scroll Message
void scrollMessage(const unsigned char * messageString) {
int counter = 0;
int myChar=0;
do {
// read back a char
myChar = pgm_read_byte_near(messageString + counter);
if (myChar != 0){
loadBufferLong(myChar);
}
counter++;
}
while (myChar != 0);
}
// Load character into scroll buffer
void loadBufferLong(int ascii){
if (ascii >= 0x20 && ascii <=0xff){
for (int a=0;a<7;a++){ // Loop 7 times for a 5x7 font
unsigned long c = pgm_read_byte_near(font5x7 + ((ascii - 0x20) * 8) + a); // Index into character table to get row data
unsigned long x = bufferLong [a*2]; // Load current scroll buffer
x = x | c; // OR the new character onto end of current
bufferLong [a*2] = x; // Store in buffer
}
byte count = pgm_read_byte_near(font5x7 +((ascii - 0x20) * 8) + 7); // Index into character table for kerning data
for (byte x=0; x<count;x++){
rotateBufferLong();
printBufferLong();
delay(scrollDelay);
}
}
}
// Rotate the buffer
void rotateBufferLong(){
for (int a=0;a<7;a++){ // Loop 7 times for a 5x7 font
unsigned long x = bufferLong [a*2]; // Get low buffer entry
byte b = bitRead(x,31); // Copy high order bit that gets lost in rotation
x = x<<1; // Rotate left one bit
bufferLong [a*2] = x; // Store new low buffer
x = bufferLong [a*2+1]; // Get high buffer entry
x = x<<1; // Rotate left one bit
bitWrite(x,0,b); // Store saved bit
bufferLong [a*2+1] = x; // Store new high buffer
}
}
// Display Buffer on LED matrix
void printBufferLong(){
for (int a=0;a<7;a++){ // Loop 7 times for a 5x7 font
unsigned long x = bufferLong [a*2+1]; // Get high buffer entry
byte y = x; // Mask off first character
lc.setRow(3,a,y); // Send row to relevent MAX7219 chip
x = bufferLong [a*2]; // Get low buffer entry
y = (x>>24); // Mask off second character
lc.setRow(2,a,y); // Send row to relevent MAX7219 chip
y = (x>>16); // Mask off third character
lc.setRow(1,a,y); // Send row to relevent MAX7219 chip
y = (x>>8); // Mask off forth character
lc.setRow(0,a,y); // Send row to relevent MAX7219 chip
}
}
Код полностью не мой немного допиляный.
Так вот проблема в том что пока бежит выбранная строка, пульт не реагирует.
Как толь один круг пройден- останавливается надпись, и ждет команды.
Выбираю другую надпись пультом, тоже самое до первого повтора, строка останавливается.
Спасибо за ранее.
такие кудато едет )
На таком надо ещё и научится.
Если вы покупаете машинку в детских товарах, а потом норовите сесть за руль и ездить по нормальным дорогам, то всем покажет, что вы идиот. Так вот и программирование на Ардуине. Оно расчитано на детей. Для проектов посложнее надо получше разбираться в Си и программированиию
По видимому Вы такой же ребенок.
Здравствуйте уважаемые. Помогите пожалуйста решить проблемку. Есть пульт, который переключаетна бегущей строке отдельные слова на LCD 8x8. При нажатиии на нужную кнопку,предложение проходит один круг и замирает в ожидании кнопки. При пробеги предложении если выбираешь другое предложение предыдущее не прерывается. Как это сделать. Только начинаю творить, помогите в этом куске скетча.
void loop(){
if ( irrecv.decode( &results )) {
Serial.println(results.value, HEX);
if (results.value==0xFF30CF){
scrollMessage(scrollText);results.value=0;
}
if (results.value==0xFF18E7){
scrollMessage(scrollText2);results.value=0;
}
irrecv.resume();
}
}
Заранее спасибо.
Сторінки 1