Sto scrivendo questo sketch per una centralina pirotecnica che funziona a distanza tramite il modulo nrf24l01.
Considerando che ho già utilizzato il 70% dello spazio dedicato alle variabili e ancora non ho implementato nulla per la comunicazione tra il modulo di trasmissione e quello di ricezione e detonazione, non so se mi basterà lo spazio.
Considerando che sono circa 10 giorni che ho messo le mani su Arduino credo che questo codice possa essere ottimizzato per risparmiare spazio, se qualcuno saprebbe indicarmi come gli sarei molto grato.
#include <RF24.h>
#include <SPI.h>
#include <nRF24L01.h>
RF24 radio(7,8);
const byte address[6] = "00001";
char c;
String stringa;
String password = "123456";
//variabili canali detonazione
int c1 = 0;
int c2 = 0;
int c3 = 0;
int c4 = 0;
int c5 = 0;
int c6 = 0;
int c7 = 0;
int c8 = 0;
void reset(){
c1 = 0;
c2 = 0;
c3 = 0;
c4 = 0;
c5 = 0;
c6 = 0;
c7 = 0;
c8 = 0;
}
void detonazione(){
while (!Serial.available()){
delay(1000);//attesa di valori seriale
}
if (Serial.available()) {
stringa = "";
do {
if(Serial.available()){
c=Serial.read();
if(c != '\n')
stringa +=c;
}
}while(c != '\n');
//Serial.println(stringa);
if (stringa == "c1" && c1 == 0){
Serial.println("");
Serial.println("Detonazione in corso...");
Serial.println("");
Serial.println("");
c1 = 1;
delay(2000);
}
else if(stringa == "c1" && c1 == 1){
Serial.println("");
Serial.println("");
Serial.println("Detonazione sul canale c1 già eseguita!!");
Serial.println("");
Serial.println("");
}
if (stringa == "c2" && c2 == 0){
Serial.println("");
Serial.println("Detonazione in corso...");
Serial.println("");
Serial.println("");
c2 = 1;
delay(2000);
}
else if(stringa == "c2" && c2 == 1){
Serial.println("");
Serial.println("");
Serial.println("Detonazione sul canale c2 già eseguita!!");
Serial.println("");
Serial.println("");
}
if (stringa == "c3" && c3 == 0){
Serial.println("");
Serial.println("Detonazione in corso...");
Serial.println("");
Serial.println("");
c3 = 1;
delay(2000);
}
else if(stringa == "c3" && c3 == 1){
Serial.println("");
Serial.println("");
Serial.println("Detonazione sul canale c3 già eseguita!!");
Serial.println("");
Serial.println("");
}
if (stringa == "c4" && c4 == 0){
Serial.println("");
Serial.println("Detonazione in corso...");
Serial.println("");
Serial.println("");
c4 = 1;
delay(2000);
}
else if(stringa == "c4" && c4 == 1){
Serial.println("");
Serial.println("");
Serial.println("Detonazione sul canale c4 già eseguita!!");
Serial.println("");
Serial.println("");
}
if (stringa == "c5" && c5 == 0){
Serial.println("");
Serial.println("Detonazione in corso...");
Serial.println("");
Serial.println("");
c5 = 1;
delay(2000);
}
else if(stringa == "c5" && c5 == 1){
Serial.println("");
Serial.println("");
Serial.println("Detonazione sul canale c5 già eseguita!!");
Serial.println("");
Serial.println("");
}
if (stringa == "c6" && c6 == 0){
Serial.println("");
Serial.println("Detonazione in corso...");
Serial.println("");
Serial.println("");
c6 = 1;
delay(2000);
}
else if(stringa == "c6" && c6 == 1){
Serial.println("");
Serial.println("");
Serial.println("Detonazione sul canale c6 già eseguita!!");
Serial.println("");
Serial.println("");
}
if (stringa == "c7" && c7 == 0){
Serial.println("");
Serial.println("Detonazione in corso...");
Serial.println("");
Serial.println("");
c7 = 1;
delay(2000);
}
else if(stringa == "c7" && c7 == 1){
Serial.println("");
Serial.println("");
Serial.println("Detonazione sul canale c7 già eseguita!!");
Serial.println("");
Serial.println("");
}
if (stringa == "c8" && c8 == 0){
Serial.println("");
Serial.println("Detonazione in corso...");
Serial.println("");
Serial.println("");
c8 = 1;
delay(2000);
}
else if(stringa == "c8" && c8 == 1){
Serial.println("");
Serial.println("");
Serial.println("Detonazione sul canale c8 già eseguita!!");
Serial.println("");
Serial.println("");
}
}
}
void pass(){
Serial.println("********************CENTRALINA PROTETTA DA PASSWORD******************** ");
Serial.println("");
Serial.println("");
while(stringa != password){
Serial.println("Inserire password: [6 caratteri]");
Serial.println("");
while (!Serial.available()){
delay(1000);//attesa di valori seriale
}
if (Serial.available()) {
stringa = "";
do {
if(Serial.available()){
c=Serial.read();
if(c != '\n')
stringa +=c;
}
}while(c != '\n');
//Serial.println(stringa);
if(stringa != password){
Serial.println("Password errata!!");
Serial.println("");
}
}
}
if(stringa == password){
Serial.println("Password corretta");
Serial.println("");
Serial.println("");
Serial.println("********************CENTRALINA PIROTECNICA A 8 CANALI********************");
Serial.println("");
Serial.println("");
}
}
void setup() {
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
reset();
pass();
}
void menup(){
Serial.println("********************MENÙ********************");
Serial.println("1)Modalità detonazione");
Serial.println("2)Resoconto detonazioni");
Serial.println("3)Resetta detonazioni");
}
void resoconto(){
Serial.println("");
Serial.print("Canale 1 (c1) ");
Serial.print(c1);
Serial.println("");
Serial.print("Canale 2 (c2) ");
Serial.print(c2);
Serial.println("");
Serial.print("Canale 3 (c3) ");
Serial.print(c3);
Serial.println("");
Serial.print("Canale 4 (c4) ");
Serial.print(c4);
Serial.println("");
Serial.print("Canale 5 (c5) ");
Serial.print(c5);
Serial.println("");
Serial.print("Canale 6 (c6) ");
Serial.print(c6);
Serial.println("");
Serial.print("Canale 7 (c7) ");
Serial.print(c7);
Serial.println("");
Serial.print("Canale 8 (c8) ");
Serial.print(c8);
Serial.println("");
Serial.println("");
Serial.println("");
}
void loop() {
menup();
while (!Serial.available()){
delay(1000);//attesa di valori seriale
}
if (Serial.available()) {
stringa = "";
do {
if(Serial.available()){
c=Serial.read();
if(c != '\n')
stringa +=c;
}
}while(c != '\n');
//Serial.println(stringa);
if(stringa == "1"){
Serial.println("");
Serial.println("");
Serial.println("********************MENÙ DI DETONAZIONE********************");
Serial.println("");
Serial.println("");
Serial.println("Per avviare la detonazione inserisci la lettera c seguita dal numero del canale(c1,c2...)");
detonazione();
}
else if(stringa == "2"){
Serial.println("");
Serial.println("");
Serial.println("********************MENÙ DETONAZIONI GIÀ ESEGUITE********************");
Serial.println("");
Serial.println("");
Serial.println("Detonazione già eseguita = 1");
Serial.println("");
Serial.println("Detonazione da eseguire = 0");
resoconto();
}
else if(stringa == "3"){
Serial.println("");
Serial.println("");
Serial.println("Sei sicuro di voler resettare?(s/n)");
Serial.println("");
while (!Serial.available()){
delay(1000);//attesa di valori seriale
}
if (Serial.available()) {
stringa = "";
do {
if(Serial.available()){
c=Serial.read();
if(c != '\n')
stringa +=c;
}
}while(c != '\n');
//Serial.println(stringa);
if(stringa =="s" || stringa == "S"){
reset();
Serial.println("");
Serial.println("Detonazioni resettate");
Serial.println("");
Serial.println("");
}
}
}
}
}